using System;
using System.Web;
using System.Web.Configuration;
using System.IO;
using System.Configuration;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using ClickSocial.Framework;
using ClickSocial.Components;
using ClickSocial.Entities;

namespace ClickSocial
{
    public partial class GetImage : CDefault
    {
        private long m_eventoid;
        private string m_archivo;
        private string m_fotografo;
        private int m_ancho;
        private int m_alto;
        private long m_venta_id;

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            m_eventoid = Convert.ToInt64(Request["eventoid"] ?? "0");
            m_archivo = Convert.ToString(Request["archivo"] ?? string.Empty);
            m_fotografo = Convert.ToString(Request["fotografo"] ?? string.Empty);
            m_ancho = Convert.ToInt32(Request["w"] ?? "280");
            m_alto = Convert.ToInt32(Request["h"] ?? "150");
            m_venta_id = Convert.ToInt64(Request["ventaid"] ?? "0");            
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            BaseDir = Application["BaseDir"] as string;

            if (m_archivo == string.Empty || m_fotografo == string.Empty)
            {
                BaseDir = MapPath("~/images");
                m_archivo = "NoImage280x150.jpg";
            }
            else
            {
                m_archivo = string.Format("{0}\\{1}\\{2}",m_fotografo, m_eventoid, m_archivo);
            }

            if (m_venta_id == 0)
            {
                RetornaImagenThumbnail();
            }
            else
            {
                RetornaImagenOrginal();
            }
        }

        private void RetornaImagenThumbnail()
        {
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();

            string archivo = GetThumbnail();
            string ext = Path.GetExtension(archivo);
            string nombre_archivo = Path.GetFileName(archivo);

            FileStream fs = new FileStream(archivo, FileMode.OpenOrCreate, FileAccess.Read);

            Context.Response.Status = "200 OK";
            Context.Response.StatusCode = 200;
            Context.Response.AppendHeader("MIME-Version", "1.0");
            Context.Response.ContentType = Mime.GetInExtension(ext);            
            Context.Response.AppendHeader("Accept-Ranges", "bytes");
            Context.Response.AppendHeader("Last-Modified", DateTime.Now.ToString());
            Context.Response.AppendHeader("Content-Length", fs.Length.ToString());
            Context.Response.AppendHeader("Content-Description", "Contenido propiedad de ClickSocial");
            Context.Response.AppendHeader("content-disposition", "filename=" + nombre_archivo);

            fs.Close();
            Response.WriteFile(archivo);
            Response.End();
        }

        private void RetornaImagenOrginal()
        {
            if (User.Identity.IsAuthenticated && Ventas.GetOne(m_venta_id, User.Identity.Name).Estado == Entities.EstadoVenta.Confirmada)
            {
                VentaInfo oVentaInfo = Ventas.GetOne(m_venta_id, User.Identity.Name);

                if (oVentaInfo != null && oVentaInfo.Estado == Entities.EstadoVenta.Confirmada)
                    m_archivo = Path.Combine(BaseDir, m_archivo);
                else
                {
                    BaseDir = MapPath("~/images");
                    m_archivo = "NoImage280x150.jpg";
                    m_archivo = Path.Combine(BaseDir, m_archivo);
                }
            }
            else
            {
                BaseDir = MapPath("~/images");
                m_archivo = "NoImage280x150.jpg";
                m_archivo = Path.Combine(BaseDir, m_archivo);
            }

            string nombre_archivo = Path.GetFileName(m_archivo);
            Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition", "attachment; filename=" + nombre_archivo);
            Response.WriteFile(m_archivo);
            Response.End();
        }

        private string GetThumbnail()
        {
            string BaseDirThumbnails = Application["BaseThumbnails"] as string;
            string dir_size = string.Format("{0}\\{1}x{2}\\{3}\\{4}", BaseDirThumbnails, m_ancho, m_alto, m_fotografo, m_eventoid);
            string archivo_src = Path.Combine(BaseDir, m_archivo);
            string archivo_dst = string.Format("{0}\\{1}x{2}\\{3}", BaseDirThumbnails, m_ancho, m_alto, m_archivo);
            string fileoutput = string.Empty;

            if (!File.Exists(archivo_dst))
            {
                if(!Directory.Exists(dir_size))
                {
                    Directory.CreateDirectory(dir_size);
                }

                try
                {


                    Image imgPhoto = Image.FromFile(archivo_src);                  
                    WMProperties pt = new WMProperties();
                    pt.setDefaultValues();
                    if (WebConfigurationManager.AppSettings["TextWaterMark"] != string.Empty)
                    {
                        pt.CopyrightText = WebConfigurationManager.AppSettings["TextWaterMark"];
                    }

                    WaterMark watermark=new WaterMark(pt.CopyrightText , ContentAlignment.MiddleCenter , pt.Font);
                    /*Image imgWaterMark=null;

                    if (m_ancho >= 145 && m_ancho < 280)                    
                        imgWaterMark = Image.FromFile(MapPath("/images/marcadeagua_145x145.png"));                        
                    else if (m_ancho >= 280 && m_ancho < 600)
                        imgWaterMark = Image.FromFile(MapPath("/images/marcadeagua_280x210.png"));
                    else if (m_ancho > 600)
                        imgWaterMark = Image.FromFile(MapPath("/images/marcadeagua_600x600.png"));

                    if(m_ancho<=100)
                        watermark = new WaterMark(pt.CopyrightText, ContentAlignment.MiddleCenter, pt.Font);
                    else
                        watermark = new WaterMark(null, pt.CopyrightText, ContentAlignment.MiddleCenter, pt.Font, imgWaterMark, ContentAlignment.MiddleCenter);
                        */
                    Image thumbNailImg = thumbNailImg = HelperImage.FixedSize(imgPhoto, m_ancho, m_alto);

                    /*if (imgPhoto.Width > m_ancho)
                        thumbNailImg = HelperImage.FixedSize(imgPhoto, m_ancho, m_alto);
                    else
                        thumbNailImg = imgPhoto;*/

                    if (m_ancho > 100)
                        thumbNailImg = watermark.PutWaterMark(thumbNailImg);
                    
                    thumbNailImg.Save(archivo_dst, ImageFormat.Jpeg);

                    thumbNailImg.Dispose();
                    imgPhoto.Dispose();

                    fileoutput = archivo_dst;
                }
                catch
                {
                    fileoutput = archivo_src;
                }

            }
            else
            {
                fileoutput = archivo_dst;
            }

            return fileoutput = archivo_dst; ;

        }

    }
}
